//
//  QSBaseTableViewController.h
//  DigitalEconomy_iOS
//
//  Created by Ding on 2020/3/16.
//  Copyright © 2020 DingC. All rights reserved.
//

#import "QSBaseViewController.h"
#import "QSBaseMultiTableViewCell.h"
#import "QSBaseCellItemDataProtocol.h"
@class QSBaseTableViewController;

/** 上拉下拉触发刷新方法 */
@protocol RefreshDataManager <NSObject>

@optional
- (void)tableViewShouldUpdateDataByPageIndex:(NSInteger)pageIndex;

@end

/**
 多种类型的Cell的tableview 需要遵从这个协议
 该协议与QSBaseMutiCellItem 和 QSBaseMultiTableViewCell配合使用
 不使用的话则正常创建tableView
 */
@protocol QSMultiCellTableViewControllerProtocol <NSObject>

@required
/** 数据源 */
- (id<QSBaseCellItemDataProtocol>)multiCellTableViewController:(QSBaseTableViewController *)controller cellItemDataForRowAtIndexPath:(NSIndexPath *)indexPath;

/** 有几个section 默认是1个 */
- (NSInteger)numberOfSectionsInMultiCellTableViewController:(QSBaseTableViewController *)controller;

/** 有几行 默认是0行 */
- (NSInteger)multiCellTableViewController:(QSBaseTableViewController *)controller numberOfItemsInSection:(NSInteger)section;

/* 是否打开多种类型cell的协议 默认是NO */
- (BOOL)isUseMultiCellTableView;

@optional
/* 是否显示section的圆角 默认是YES */
- (BOOL)isShowCornerSection;

@end

@interface QSBaseTableViewController : QSBaseViewController<UITableViewDelegate, UITableViewDataSource, RefreshDataManager, QSMultiCellTableViewControllerProtocol>
/** 样式 默认是UITableViewStylePlain */
@property(nonatomic, assign) UITableViewStyle style;

/** tableview */
@property(nonatomic, strong) UITableView *tableView;

/** 数据源 */
@property(nonatomic, strong) NSMutableArray *dataArray;

/** 页码 默认是1 */
@property(nonatomic, assign, readonly) NSInteger pageIndex;

/** 设置下拉刷新文字颜色 */
- (void)setRefreshHeaderTextColor:(UIColor *)textColor;

/** 设置上拉刷新文字颜色 */
- (void)setRefreshFooterTextColor:(UIColor *)textColor;

/** 添加下拉刷新 */
- (void)addRefreshHeader;

/** 添加上拉刷新 */
- (void)addRefreshFooter;

/** 结束刷新 */
- (void)endRefreshing;

/** 结束刷新 footer显示没有更多 */
- (void)endRefreshingWithNoMoreData;

/** 刷新数据 */
- (void)startRefreshing;

/** 刷新数据 是否有动画*/
- (void)startRefreshing:(BOOL)animated;
@end

